from datetime import datetime
from typing import Annotated

from pydantic import BaseModel, Field


class RecipeSchema(BaseModel):
    """Используется при создании нового рецепта."""

    title: str = Field(
        ...,
        min_length=3,
        max_length=64,
        title="Название блюда",
        description="Название блюда.",
    )
    cooking_time: int = Field(
        ...,
        gt=0,
        title="Время приготовления",
        description="Примерное время на приготовление блюда в минутах.",
    )
    ingredients: str = Field(
        ...,
        min_length=3,
        max_length=1024,
        title="Ингредиенты",
        description="Необходимые для приготовления блюда ингредиенты и их количество.",
    )
    description: str = Field(
        ...,
        min_length=3,
        max_length=1024,
        title="Описание",
        description="Подробное описание процесса приготовления блюда.",
    )


class RecipeDBSchema(RecipeSchema):
    """Формат хранения рецепта в базе данных и детального вида рецепта."""

    id: int
    view_count: int = Field(
        ...,
        title="Количество просмотров",
        description="Количество просмотров детального вида рецепта.",
    )
    created_date: datetime = Field(
        ...,
        title="Время создания",
        description="Дата и время создания рецепта в базе данных.",
    )


class RecipeListSchema(RecipeDBSchema):
    """Формат рецепта при выдаче в списке."""

    ingredients: Annotated[str, Field(exclude=True)]
    description: Annotated[str, Field(exclude=True)]
    created_date: Annotated[datetime, Field(exclude=True)]
